package ru.familyportal.jsf;

import org.richfaces.event.FileUploadEvent;
import org.richfaces.exception.FileUploadException;
import org.richfaces.model.UploadedFile;
import ru.familyportal.model.entity.Preferences;

import javax.faces.context.FacesContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

/**
 * Created by Alex Efimov.
 * User: Саня
 * Date: 05.05.12
 * Time: 18:36
 */
public class FacesSupport {

    public static final byte[] getImageBytes(UploadedFile upFile) {
        byte[] aby = null;
        if (upFile != null && upFile.getSize() > 0) {
            try {
                aby = upFile.getData();
            } catch (FileUploadException upExc) {
                upExc.printStackTrace(); // todo: log it
            }
        }
        return (aby != null && aby.length > 0) ? aby : null;
    }

    public static byte[] toBytes(File file) throws IOException {
        // Get the size of the file
        long length = file.length();

        // You cannot create an array using a long type.
        // It needs to be an int type.
        // Before converting to an int type, check
        // to ensure that file is not larger than Integer.MAX_VALUE.
        if (length > Integer.MAX_VALUE) {
            // File is too large
            throw new IOException("File is too large!");
        }

        // Create the byte array to hold the data
        byte[] bytes = new byte[(int) length];

        // Read in the bytes
        int offset = 0;
        int numRead = 0;

        InputStream is = new FileInputStream(file);
        try {
            while (offset < bytes.length
                    && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
                offset += numRead;
            }
        } finally {
            is.close();
        }

        // Ensure all the bytes have been read in
        if (offset < bytes.length) {
            throw new IOException("Could not completely read file " + file.getName());
        }
        return bytes;
    }
}
